package cn.wen.bases.framework.struts;

import java.util.Map;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.PageContext;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.views.jsp.TagUtils;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionProxy;
import com.opensymphony.xwork2.util.ValueStack;

/**
 * Title：Struts 工具类
 * <p>
 * Description：提供在ValueStack中查找值对象，和各种WEB对象。
 * <p>
 * Copyright：Copyright (c) 2010-2012
 * 
 * @author <a href="mailto:ct_wen@qq.com">ctwen</a>, 温承瑭
 * @version Revision：1.0 Date：2010/11/20 Description：初完成。
 *          <p>
 *          Revision：1.1 Date：2011/4/26 Description：小修getValueStack方法。
 *          <p>
 *          Revision：1.2 Date：2012/4/22 Description：删除获取Session，新增获取ServletContext。
 *          <p>
 *          Revision：1.3 Date：2012/5/15 Description：新增getActionProxy方法（提供Action的代理对象）。
 *          <p>
 */
public class UtilsOfStruts {

    /**
     * 从当前请求，获取值栈。
     * 
     * @return ValueStack
     */
    public static ValueStack getValueStackForRequest() {
	return ServletActionContext.getValueStack(getHttpServletRequest());
    }

    /**
     * 从请求，获取值栈。
     * 
     * @return ValueStack
     */
    public static ValueStack getValueStack(HttpServletRequest request) {
	return ServletActionContext.getValueStack(request);
    }

    /**
     * 从当前PageContext，获取值栈。
     * 
     * @return ValueStack
     */
    public static ValueStack getValueStackForPageContext() {
	return TagUtils.getStack(ServletActionContext.getPageContext());
    }

    /**
     * 从PageContext，获取值栈。
     * 
     * @return ValueStack
     */
    public static ValueStack getValueStack(PageContext pageContext) {
	return TagUtils.getStack(pageContext);
    }

    /**
     * 获取HttpServletRequest
     * 
     * @return HttpServletRequest
     */
    public static HttpServletRequest getHttpServletRequest() {
	return ServletActionContext.getRequest();
    }

    /**
     * 获取HttpServletResponse
     * 
     * @return HttpServletResponse
     */
    public static HttpServletResponse getHttpServletResponse() {
	return ServletActionContext.getResponse();
    }

    /**
     * 获取反转的Session
     * 
     * @return Session
     */
    public static Map<String, Object> getSession() {
	return ActionContext.getContext().getSession();
    }

    /**
     * 获取ServletContext
     * 
     * @return ServletContext
     */
    public static ServletContext getServletContext() {
	return ServletActionContext.getServletContext();
    }

    /**
     * 获取当前处理的Action代理对象。
     * 
     * @return Action代理对象。
     */
    public static ActionProxy getActionProxy() {
	return ActionContext.getContext().getActionInvocation().getProxy();
    }

}
